package cliente.servico;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;
import javax.swing.JOptionPane;

import cliente.tipos.Servico;

import mensagens.ManterServico;
import mensagens.EnviaDados;
import mensagens.Mensagem;

@SuppressWarnings("serial")
public class AcoesProcurarServicos extends AbstractAction{

	private ProcurarServicos ps;
	private int ServicoId;
	
	public AcoesProcurarServicos(ProcurarServicos ps) {
		setPs(ps);
		setServicoId(0);
	}
	
	@Override
	public void actionPerformed(ActionEvent ev) {
		// Se a ação é procurar
		if("procurar".equals(ev.getActionCommand())){
			// Pegamos a descrição da caixa de texto
			String serviceName = getPs().getDescticaoText().getText();
			// int serviceId = new Integer(getPs().getServidoIdText().getText());
			ManterServico bs = new ManterServico(2);
			bs.setServicoBusca(serviceName);
			// bs.getServico().setServiceId(serviceId);
			
			// Cria uma mensagem e envia a mensagem de busca
			Mensagem mess = EnviaDados.enviarMensagem(bs);
			
			// Verifica se a mensagem que retornou é do tipo BuscaServico
			if (mess instanceof ManterServico) {
				bs = (ManterServico) mess;
			}
			
			// Se o serviço foi encontrado preeche as JTextFields com os dados
			if(bs.getFound() == 1){
				getPs().getServidoIdText().setText((new Integer(bs.getServico().getServiceId()).toString()));
				getPs().getDescticaoText().setText(bs.getServico().getDescricao());
				getPs().getPrecoText().setText((new Double(bs.getServico().getPreco())).toString());
				setServicoId(bs.getServico().getServiceId());
			} else {
				JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Serviço não encontrado", "Erro!",JOptionPane.ERROR_MESSAGE);
			}
		} else
			if("fecha".equals(ev.getActionCommand())){
				getPs().getTfBuscarServicos().dispose();
			} else 
				if("alterar".equals(ev.getActionCommand())){
					if(getServicoId()!= 0){
						Servico service = new Servico();
						ManterServico mis = new ManterServico(4);
						service.setDescricao(getPs().getDescticaoText().getText());
						if(service.getDescricao().length() == 0) {
							JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Descição não pode ficar em branco!", "Erro!",JOptionPane.ERROR_MESSAGE);
							return;
						}
						try{
							service.setPreco(new Double(getPs().getPrecoText().getText()));
						} catch (NumberFormatException nfe){
							nfe.printStackTrace();
							JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Preço em formato errado! Não utilize '.' nem ',' ", "Erro!",JOptionPane.ERROR_MESSAGE);
							return;
						}
						
						service.setServiceId(getServicoId());
						mis.setServico(service);
						
						Mensagem mess = EnviaDados.enviarMensagem(mis);
						if (mess instanceof ManterServico) {
							mis = (ManterServico) mess;
							if(mis.getTipoManterServico() == 41)JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Servico alterado com sucesso!", "Info!",JOptionPane.INFORMATION_MESSAGE);
							else JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Erro na alteração!", "Erro!",JOptionPane.ERROR_MESSAGE);
						}
						
					} else {
						JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Localize um serviço primeiro!", "Erro!",JOptionPane.ERROR_MESSAGE);
					}
				} else 
					if("apagar".equals(ev.getActionCommand())){
						Servico service = new Servico();
						int response = JOptionPane.showConfirmDialog(getPs().getTfBuscarServicos(), "Você tem certeza que deseja apagar?","Confirmação!", JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
						if(response == JOptionPane.YES_OPTION){
							ManterServico apagaServico = new ManterServico(3);
							service.setDescricao(getPs().getDescticaoText().getText());
							if(service.getDescricao().length() == 0) {
								JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Descição não pode ficar em branco!", "Erro!",JOptionPane.ERROR_MESSAGE);
								return;
							}
							try{
								service.setPreco(new Double(getPs().getPrecoText().getText()));
							} catch (NumberFormatException nfe){
								nfe.printStackTrace();
								JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Preço em formato errado! Não utilize '.' nem ',' ", "Erro!",JOptionPane.ERROR_MESSAGE);
								return;
							}
							
							service.setServiceId(getServicoId());
							apagaServico.setServico(service);
							
							Mensagem mess = EnviaDados.enviarMensagem(apagaServico);
							if(mess instanceof ManterServico){
								apagaServico = (ManterServico) mess;
								if(apagaServico.getTipoManterServico() == 31){
									System.out.println("Apagado com sucesso");
									JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Serviço Apagado com Sucesso!", "info!",JOptionPane.INFORMATION_MESSAGE);
								} else 
									JOptionPane.showMessageDialog(getPs().getTfBuscarServicos(),"Problemas para apagar o servico", "Erro!",JOptionPane.ERROR_MESSAGE);
							}
						}
				}
	}

	public void setPs(ProcurarServicos ps) {
		this.ps = ps;
	}

	public ProcurarServicos getPs() {
		return ps;
	}

	public void setServicoId(int servicoId) {
		ServicoId = servicoId;
	}

	public int getServicoId() {
		return ServicoId;
	}

	
}